Modern central processing units (CPUs) are complex system on a chip (SoC) devices that integrate multiple microprocessor cores, graphics engines, and other fixed functions on a single semiconductor die. A CPU can include an expansion bus interface, such as the Peripheral Component Interconnect Express (PCIe) interface. In a typical configuration, an integrated circuit (IC) package having the CPU is mounted to a printed circuit board (PCB). Various peripherals are mounted to the PCB external to the CPU IC package in either fixed or removable fashion. The peripherals are coupled to the PCIe interface of the CPU through the PCB and pins of the CPU IC package. Such a configuration has a large footprint, requiring at least multiple ICs mounted on a PCB and at worst space for expansion ports into which other PCBs having the peripherals can be inserted.
Programmable integrated circuits (ICs) are often used to implement digital logic operations according to user configurable input. Example programmable ICs include complex programmable logic devices (CPLDs) and field programmable gate arrays (FPGAs). CPLDs often include several function blocks that are based on a programmable logic array (PLA) architecture with sum-of-products logic. A configurable interconnect matrix transmits signals between the function blocks.
One type of FPGA includes an array of programmable tiles. The programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet and so forth. Each programmable tile typically includes both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
Programmable ICs can be used to implement peripherals for use by CPUs, such as for use as hardware accelerators. Hardware acceleration involves the use of hardware to perform some functions more efficiently than software executing on a general-purpose CPU. A hardware accelerator is special-purpose hardware designed to implement hardware acceleration for some application. Example applications include neural networks, video encoding, decoding, transcoding, etc., network data processing, and the like. Such hardware accelerators are typically implemented as PCIe cards that are inserted into slots on the motherboard. The CPU and programmable IC are two separate ICs that are physically separated by components on the motherboard. It is desirable to provide a more efficient implementation of a computing system having CPUs and programmable IC(s) used as peripherals.